/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Classes.Materiel;
import Classes.Retroprojecteur;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author apo
 */
public class RetroprojecteurDAO extends DAO<Retroprojecteur> {

    /**
     * Constructeur de la classe OrdinateurDAO
     *
     * @param conn
     */
    public RetroprojecteurDAO(java.sql.Connection con) {
        super(con);
    }

    /**
     * La fonction prend en paramètre un objet Retroprojecteur et insère les informations de l'objet en base
     * @param r
     * @throws SQLException 
     */
    public void insert(Retroprojecteur r) throws SQLException {
        MaterielDAO myMaterielDAO = new MaterielDAO(connexion);
        myMaterielDAO.insert(r);

        String query = " INSERT INTO"
                + " retroprojecteur"
                + " (fk_id_materiel, typeAmp)"
                + " VALUES (\"" + r.getId()+ "\",\""
                + r.getTypeAmp()
                + "\")";

        state.executeUpdate(query);
    }

    /**
     * La fonction prend en paramètre un objet Retroprojecteur et supprime l'entrée correspondante à l'id de l'objet 
     * @param r
     * @throws SQLException 
     */
    @Override
    public void delete(Retroprojecteur r) throws SQLException {
        String query = " DELETE FROM retroprojecteur"
                + " WHERE fk_id_materiel IN"
                + "(SELECT id FROM materiel WHERE numCB ="
                + r.getNumCB()
                + ")";

        state.executeUpdate(query);
    }

    /**
     * La fonction prend en paramètre un objet Retroprojecteur et met a jour les informations correspondantes à l'objet 
     * @param r
     * @throws SQLException 
     */
    
    public void update(Retroprojecteur r) throws SQLException {
        MaterielDAO myMaterielDAO = new MaterielDAO(connexion);
        myMaterielDAO.update(r);

        String query = " UPDATE  retroprojecteur"
                + " SET typeAmp = " + "\"" + r.getTypeAmp() + "\""
                + " WHERE id_retroprojecteur = " + r.getId();

        state.executeUpdate(query);
    }

    /**
     * La fonction recherche tous les rétroprojecteurs de la base de données et construit une Map de rétroprojecteurs
     * @return Map<Long, Retroprojecteur>
     */
    public Map<Long, Retroprojecteur> findAll() {
        Map<Long, Retroprojecteur> listeRetroprojecteur = new HashMap();
        ResultSet result2;
        try {
            String query = "SELECT * FROM materiel, retroprojecteur WHERE retroprojecteur.fk_id_materiel = materiel.id";
                         
            result2 = state.executeQuery(query);
            while (result2.next()) {
                listeRetroprojecteur.put(result2.getLong("numCB"), new Retroprojecteur(result2.getLong("numCB"), result2.getInt("numCompta"), result2.getString("numSerie"), result2.getString("nom"), result2.getString("descriptif"), result2.getString("dateHT"), result2.getDouble("prixHT"), result2.getInt("garantie"), result2.getString("numBC"), result2.getString("budget"), result2.getDouble("amortissement"), result2.getInt("idT"), result2.getInt("idM"), result2.getInt("idS"), result2.getInt("idSc")));
            }
            return listeRetroprojecteur;


        } catch (SQLException exc) {
            System.out.println("[Debug] Problème query : RetroprojecteurDAO - findAll()");
            exc.printStackTrace();

        }
        return null;
    }
    /**
     * Prend en parametre un code barre d'un retroprojecteur et retourne toutes les caractéristiques de celui-ci
     * @param CB
     * @return Object<Retroprojecteur>
     */
    public Retroprojecteur loadByCodeBarre(Long CB){
        
        Retroprojecteur myRetroprojecteur = new Retroprojecteur();
        ResultSet result;
        
        try {
            String query = "SELECT * FROM retroprojecteur R"
                        + " LEFT JOIN materiel M"
                        + " ON R.fk_id_materiel = M.id"
                        + " WHERE M.numCB = " + CB;
            result = state.executeQuery(query);
            while (result.next()) {
                
                myRetroprojecteur.setNumCB(result.getLong("numCB"));
                myRetroprojecteur.setNumCompta(result.getInt("numCompta"));
                myRetroprojecteur.setNumSerie(result.getString("numSerie"));
                myRetroprojecteur.setNom(result.getString("nom"));
                myRetroprojecteur.setDescriptif(result.getString("descriptif"));
                myRetroprojecteur.setDateHT(result.getString("dateHT"));
                myRetroprojecteur.setPrixHT(result.getDouble("prixHT"));
                myRetroprojecteur.setGarantie(result.getInt("garantie"));
                myRetroprojecteur.setNumBC(result.getString("numBC"));
                myRetroprojecteur.setBudget(result.getString("budget"));
                myRetroprojecteur.setAmortissement(result.getDouble("amortissement"));
                myRetroprojecteur.setIdT(result.getInt("idT"));
                myRetroprojecteur.setIdM(result.getInt("idM"));
                myRetroprojecteur.setIdS(result.getInt("idS"));
                myRetroprojecteur.setIdSc(result.getInt("idSc"));
                myRetroprojecteur.setTypeAmp("TYPEAmp");
                                
            }
            
        } catch (SQLException exc) {
            System.out.println("[Debug] Problème query : RetroprojecteurDAO - loadByCodeBarre()");
            exc.printStackTrace();
            
        }
        return myRetroprojecteur;
        
    }
}
